package com.daydayup.learn;

/**
 * 给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。
 * 请注意 ，必须在不复制数组的情况下原地对数组进行操作。
 */
public class LeetCode283 {

    public void moveZeroes(int[] nums) {
        if (nums == null) return;
        int fast = 0,slow = 0;
        while (fast < nums.length) {
            if (nums[fast] != 0) {
                int temp = nums[fast];
                nums[fast] = nums[slow];
                nums[slow] = temp;
                slow++;
            }
            fast++;
        }
    }
    // 移动指定数字到末尾
    public static void moveNum(int[] nums,int n) {
        if (nums == null) return;
        int fast = 0,slow = 0;
        while (fast < nums.length) {
            if (nums[fast] != n) {
                int temp = nums[fast];
                nums[fast] = nums[slow];
                nums[slow] = temp;
                slow++;
            }
            fast++;
        }
        System.out.println(slow);
        for (int i = 0; i < nums.length; i++) {
            System.out.print(nums[i]+" ");
        }
        System.out.println("-------------------------");
        for (int i = 0; i < slow; i++) {
            System.out.print(nums[i]+" ");
        }
    }

    public static void main(String[] args) {
//        int[] arr = new int[]{0,1,0,3,12};
//        new LeetCode283().moveZeroes(arr);
//
//        for (int i : arr) {
//            System.out.println(i);
//        }
        int[] arr = new int[]{1,1,1,3,3,6,8,9,0,0,2,2,3};
        moveNum(arr,2);
    }
}
